на 26 патче это без тригов невозможно
с тригами - система выдачи баффов и скрытые спеллбуки с нужными способностями и их выдача нужным юнитам на нужное время
также в карте замок скиби есть аура, эффекты которой суммируются, но она опять таки триггерная
easypeasy, не юзать рунные браслеты, а юзать благословение элуны, она стакается, все резисты работают в порядке преобретерия с уменьшающейся эффективностью, у героев 25% резиста к магии, он будет самым первым всегда, далее резист считается от оставшихся 75% урона.
Применяй permanent при добавлении абилки юниту. Когда абилку удалишь, эффект исчезнет. При морфе перманентные абилки останутся. На спеллбук также работает, но надо перманентить сам спеллбук и вложенные в него абилки.
MoreDoPass, для этого и нужны массивы, чтобы было MUI
первый триггер сохраняет все нужные данные на один общий индекс, например PlantmineCount, и увеличивает этот индекс на один.
второй триггер каждые 0,0Х секунд пробегается по массиву от нуля до PlantmineCount, проверяет расстояние и если оно подходит, делает нужные действия. После этого, чтобы тот же элемент не обрабатывался заново, нужно заменить его во всех массивах на последний и уменьшить PlantmineCount на 1. И счетчик цикла тоже уменьшить на 1, иначе этот последний элемент будет пропущен тк индекс по циклу уйдет дальше.
Потом над блоками надо поставить невидимые платформы и поднимать/опускать кнопками Ctrl+Shift+PgUp/PgDn. PrincePhoenix, он всё равно лучший ответ не выбирает, бот такие не обрабатывает.
Событие: боевая единица атакован -
Условия: владелец атакованного и атаковавшего союзники
Действия: Боевая единица- приказ без указания цели атаковавший отставить.
Это так примитив, можно так же извратится с событием получает урон и лечить юнита на кол-во полученного урона.
Это баг варика. Когда ты используешь несколько диалогов и показываешь их подряд, название Title надо каждый раз заново создавать. Если бы у тебя был один диалог и ты бы его показывал несколько раз подряд - заголовок сохраниться.
Могу посоветовать при пересоздании запускать триггер dialog повторно.
Тип передвижения на Нет ставишь?
Хотя, если здание, значит прямоугольная карта путей по игровой сетке, а не любое местоположение. Тип передвижения в этом случае не важен.
Я думаю кроме нас тут уже больше никто не напишет поэтому я закрою вопрос, спасибо за внимание и ответы.
Думал сделать двойную атаку с определенным шансом, типа герой делает сразу 2 выстрела вместо 1. Потом на ум пришла другая идея: когда герой прокачивает свою пассивную способность, около него появляется дамми юнит с атакой. И он должен атаковать вражеского юнита, когда этого делает и сам герой. Тоесть он не то что появляется и автоатачит ближайших врагов, а атакует однократно
Если бы хотел, сделал бы урон дамми больше с каждым уровнем, но я не умею такое провернуть, а вы не обязаны делать все за меня. Поэтому прошу лишь подсказок
Вот тебе костыль на основе техники. Даешь ауру, которая изначально не имеет целей, потом при изучении техники прикручиваешь грейд ауры. Триггеры ловят баффы аур, и создаешь даммиков, стирая/добавляя старых.
Я знаю только один способ избавления от утечек - писать код без них.Тебе нужен кто-то знающий игровые скрипты или злосчастный Jass. Иначе уровень неопределённости вопроса не позволит подсказать что-то дельное.
Причина: причин было много, а я искал лишь одну
Самыми распространёнными оказались элементарные ошибки в коде, отсутствие параметров, параметры не того типа данных (привет динамическая типизация) или лишние параметры, из за чего происходили "рандомные рассинхроны при обрыве потока"
Огромное спасибо пользователю prog, что откликнулся и смог найти ошибки, а нашёл он их при помощи языкового сервера sumneko lua для VScode
Объясню, почему я удалил код: после проведённого за кодом времени, я понял, что сильно погорячился, задав такой глупый вопрос. Стоило отдохнуть, проветрить голову, и решение нашлось. Тем, кто столкнулся с хоть самую малость, но похожей проблемой, дам совет: всегда проверяйте соответствия заклинаний, написанных в коде jass (CTRL + D, если кто не знает, как узнать id заклинания) и ,конечно, сам синтаксис. Также посоветую не утраивать "свалку" в коде, как это сделал я. В общем, если кому интересно, как я решил проблему, пишите - расскажу или даже помогу если у вас она схожая.(Всё дело во внимательности)...
Сброшу код триггера таким, каким я его хотел видеть изначально:
function MU_Check_lvl_four takes nothing returns boolean
if ( not ( GetUnitAbilityLevelSwapped('A011', udg_Akame_Killer) == 4 ) ) then
return false
endif
return true
endfunction
function MU_Check_lvl_three takes nothing returns boolean
if ( not ( GetUnitAbilityLevelSwapped('A011', udg_Akame_Killer) == 3 ) ) then
return false
endif
return true
endfunction
function MU_Check_lvl_two takes nothing returns boolean
if ( not ( GetUnitAbilityLevelSwapped('A011', udg_Akame_Killer) == 2 ) ) then
return false
endif
return true
endfunction
function MU_Check_lvl_one takes nothing returns boolean
if ( not ( GetUnitAbilityLevelSwapped('A011', udg_Akame_Killer) == 1 ) ) then
return false
endif
return true
endfunction
function MU_Second_Conditions takes nothing returns boolean
if ( not ( UnitHasBuffBJ(GetEventDamageSource(), 'B008') == true ) ) then
return false
endif
if ( not ( GetEventDamageSource() == udg_Akame_Killer ) ) then
return false
endif
return true
endfunction
function MU_Start_Conditions takes nothing returns boolean
if ( not ( UnitHasBuffBJ(GetAttacker(), 'B008') == true ) ) then
return false
endif
if ( not ( GetAttacker() == udg_Akame_Killer ) ) then
return false
endif
return true
endfunction
function Trig_MU_Conditions takes nothing returns boolean
if ( not MU_Start_Conditions() ) then
return false
endif
return true
endfunction
function MU_Venum_Check takes nothing returns boolean
if ( not ( udg_MU_Venum_counter == 2 ) ) then
return false
endif
return true
endfunction
function MU_del takes nothing returns nothing
if ( MU_Check_lvl_one() ) then
call SetPlayerAbilityAvailableBJ( true, 'A00X', GetOwningPlayer(GetEventDamageSource()) )
call UnitRemoveAbilityBJ( 'A00X', GetEventDamageSource() )
else
if ( MU_Check_lvl_two() ) then
call SetPlayerAbilityAvailableBJ( true, 'A00U', GetOwningPlayer(GetEventDamageSource()) )
call UnitRemoveAbilityBJ( 'A00U', GetEventDamageSource() )
else
if ( MU_Check_lvl_three() ) then
call SetPlayerAbilityAvailableBJ( true, 'A00Y', GetOwningPlayer(GetEventDamageSource()) )
call UnitRemoveAbilityBJ( 'A00Y', GetEventDamageSource() )
else
if ( MU_Check_lvl_four() ) then
call SetPlayerAbilityAvailableBJ( true, 'A013', GetOwningPlayer(GetEventDamageSource()) )
call UnitRemoveAbilityBJ( 'A013', GetEventDamageSource() )
else
call DoNothing( )
endif
endif
endif
endif
endfunction
function Trig_MU_Actions takes nothing returns nothing
call DestroyTrigger(udg_MU_trig)
set udg_MU_Venum_counter = GetRandomInt(1, 5)
set udg_MU_TG = GetAttackedUnitBJ()
if ( MU_Venum_Check() ) then
if ( MU_Check_lvl_one() ) then
call UnitAddAbilityBJ( 'A00X', udg_Akame_Killer )
call SetPlayerAbilityAvailableBJ( false, 'A00X', GetOwningPlayer(udg_Akame_Killer) )
else
if ( MU_Check_lvl_two() ) then
call UnitAddAbilityBJ( 'A00U', udg_Akame_Killer )
call SetPlayerAbilityAvailableBJ( false, 'A00U', GetOwningPlayer(udg_Akame_Killer) )
else
if ( MU_Check_lvl_three() ) then
call UnitAddAbilityBJ( 'A00Y', udg_Akame_Killer )
call SetPlayerAbilityAvailableBJ( false, 'A00Y', GetOwningPlayer(udg_Akame_Killer) )
else
if ( MU_Check_lvl_four() ) then
call UnitAddAbilityBJ( 'A013', udg_Akame_Killer )
call SetPlayerAbilityAvailableBJ( false, 'A013', GetOwningPlayer(udg_Akame_Killer) )
else
call DoNothing( )
endif
endif
endif
endif
set udg_MU_trig = CreateTrigger()
call TriggerRegisterUnitEvent( udg_MU_trig, udg_MU_TG, EVENT_UNIT_DAMAGED )
call TriggerAddCondition( udg_MU_trig, Condition( function MU_Second_Conditions ) )
call TriggerAddAction( udg_MU_trig, function MU_del )
else
call DoNothing( )
endif
endfunction
//===========================================================================
function InitTrig_MU takes nothing returns nothing
set gg_trg_MU = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_MU, EVENT_PLAYER_UNIT_ATTACKED )
call TriggerAddCondition( gg_trg_MU, Condition( function Trig_MU_Conditions ) )
call TriggerAddAction( gg_trg_MU, function Trig_MU_Actions )
endfunction
Суть триггера:
Имеется способность с четырьмя уровнями. На каждом уровне урон способности разный, а шанс срабатывания всегда 25%. При атаке герой, имеющий такую способность имеет шанс (25%) на отравление противника.
Переменная udg_Akame_killer равносильна GetEventDamageSource()
P.S. Возможно кому-то даже пригодится этот код... Сделан полнейшим неумехой в плане jass, так что не судите строго!
Пока нет желания разбираться, что у тебя так, а что не так. Но вижу, что переменная Window не назначена окну, а ещё как бы создаются в цикле одновременно 10 окон, которые потом все одновременно ждут 50 секунд. Вот скрин действий триггера вместо двух твоих, секунда ожидания поставлена для того, чтобы увидеть пропадание окна таймера.
Довольно тяжело в этом разобраться, ты думаешь о том, что тебе нужно, но не всё договариваешь, а залезть в твою голову не могу. Во-первых, нумерация массива начинается с 0, то есть размерность переменной 1 представляет два массива - переменная[0] и переменная[1], но у тебя переменная[0] вроде не задействована. Во-вторых, на первом скрине у тебя цикл по А от 2 до 10, а в пояснении пишешь, что стандартные резолюции с 1 по 8, но в таком случае обработка идёт с 1 по 9 для А-1. Ошибка ли это, либо дальше 9 иначе обрабатывается, непонятно, скрин обрезан. В-третьих, хотя не уверен, что проблема в этом, но может быть обработку остальных действий вызывает очистка диалога, попробуй переместить If/Then/Else первой кнопки в самый низ, чтобы очистка диалога срабатывала последней. В-четвёртых, создание юнита создаёт утечку группы, надо после этого действия удалять последнюю созданную группу.
Вроде такой custom script: call DestroyGroup(Last Created Unit Group).
Баг абилки
исправляется с помощью тригга - добавляем анимационный таг, счетчик для количества ударов и даем руну на морф с другим типом атаки\бонус к урону\...
само собой абилку заменяем другой, можно на основе канала
Причина: причин было много, а я искал лишь одну
Самыми распространёнными оказались элементарные ошибки в коде, отсутствие параметров, параметры не того типа данных (привет динамическая типизация) или лишние параметры, из за чего происходили "рандомные рассинхроны при обрыве потока"
Огромное спасибо пользователю prog, что откликнулся и смог найти ошибки, а нашёл он их при помощи языкового сервера sumneko lua для VScode
Читал новое пользовательские соглашение? Потом разжевывали на одной из тем по патчам рефорджа. Близзарды перестраховались, и теперь низя в карту контент пихать, который не твой или свободно распростроняемый, в противном случае хоть 1 жалоба на твою карту - бан, любой мудак которому че-то не понравится может написать близардам, они не будут разбираться он хозяин контента или нет.
Правообладатели нарут и прочих аниме прав тебе никогда не дадут, даже разговаривать не будут, только юр. Лицаи только много денег, бомжи вроде нас с тобой им не интересны. Но при этом за спасибо тебе никто не даст прав делать карту в которой все бы бесплатно играли.
Лучший способ избежать потери информации ввиду такого рода глюков в будущем - это регулярное создание резервных копий. Желательно одновременно на компьютере (в архиве .7z, чтобы избежать разного рода "авто-детектов" наподобие того, который использует рефандед при деинсталляции) и еще где-нибудь, к примеру, на яндекс диске, или на внешнем жестком диске. А еще лучше, если этих "где-нибудь" несколько. К примеру, мой варкрафт 1.26 лежит на всех доступных мне внешних носителях информации, обладающих достаточной вместимостью. И потерять и его могу, только если они все навернутся одновременно.
А группы в массиве CreepsGroup созданы? Нужно либо создавать группы при инициализации, проходясь циклом по массиву, либо в константах указать "размер" массива, и тогда они будут сами созданы. То есть нужно 12 групп -- ставишь размер 12, группы будут созданы в ячейках с 0 по 11.
если ты создаешь нейтрально-враждебных то нужно им в игровых константах менять значения
пошамань с этими значениями и все норм будет, ну а если у тебя монстры под контролем других игроков а не нейтралов, то тогда не знаю даже
guard distance - это расстояние на котором крипы агряться
guard return distance - это на какое расстояние мобы могут отходить от место их создания, если они отошли на 1000 они возвращаются обратно
guard return time - типо тоже самое что с расстоянием, только время
Видимо єта кнопка тесно спряжена с более низкими слоями игры (чит. "hardcoded"). Похоже, что скрыть её нельзя. Я могу только посоветовать вернуться назад и посмотреть, что можно сделать по-другому, чтобы не приходилось скрывать кнопку.
Порыть там надо, во всяком случае стандартные приказы, иконки и клавиши к ним там прописаны.
(естесственно нужно импоритровать эти изменённые файлики в карту)
Я пробовал прописывать кнопке неадекватные значения позиции кнопки и пиктограммы, но ничего не вышло — игра подставляет свои значения.
да сделать такое можно...
при использовании способности "звездопад"... создаём даммика которому приказываем использовать предметную способность распространения порчи...
Лимит операций, обычно это беда настигает заядлых гуишников.
На jass обычно нету таких проблем.
Создайте таймер с периодом .00 сек и запускайте им функции инициализации триггеров.
функция типа InitTrig_Имя триггера - это функция инициализации триггера, она вызывается из функции InitCustomTriggers, но если этих вызовов очень много то функция упирается в лимит операций и поток завершается так и не создав все триггеры.
ну редактор тебе ведь написал, что файл поврежден. если даже он работает в игре, это еще не значит, что с ним все в порядке.
если же эдитор на все подряд ругается - другое дело, снести и поставить опять
Редактор ландшафта -> Файл -> Экспортировать скрипт карты. Пишешь небольшой парсер, который отсекает всё до первого триггера, затем каждый триггер в отдельный файл, затем всё после последнего триггера в отдельный файл.
в качестве параметра Condition должна быть функция которая takes nothing returns boolean
для ForGroupBJ должна быть функция takes nothing returns nothing
смотри гуишные примеры и читай статьи
с погоней всё легко(если ты конечно не хочешь чтобы аи прошёл Тест Тьюринга)
если юнит врага видим то запоминаем его координаты и идём к нему
если юнит врага исчез из области видимости (ушёл в туман/инвиз) то идём к последнему местонахождению врага(наши запомненные координаты)
стоит совместить это с проверкой на смерть цели погони(чтобы не бежать к трупу) и с проверкой на угрозу (чтобы не залезть под фонтан случайно)
добавить кода и специй по вкусу
» WarCraft 3 / Стаки
» WarCraft 3 / Соединение предметов.
» WarCraft 3 / Слетает переменная
» WarCraft 3 / Расположение разрушаемый декораций друг на друге
» WarCraft 3 / Как не бить союзников
» WarCraft 3 / Заголовок
» WarCraft 3 / Лагает спавн юнитов
» Администрация XGM / Переезд проектов
» WarCraft 3 / Косяки mdlvis
» WarCraft 3 / Помощ с условием
» WarCraft 3 / урон деревьям
» WarCraft 3 / Warcraft 3 Reforged. Модели
» WarCraft 3 / Проблемы с работой триггеров
» WarCraft 3 / Как скрыть кнопку строительства?
» WarCraft 3 / Объединение способностей
» WarCraft 3 / Как сделать геройское свечение?
» WarCraft 3 / Крашится модель
» WarCraft 3 / Редактор кода
» WarCraft 3 / общий вопрос про jass
» WarCraft 3 / Редакторы карт WarCraft 3
» WarCraft 3 / помогите вспомнить карту
» WarCraft 3 / Враг на миникарте
» WarCraft 3 / Как изменить условие наоборот?